//创建节点的类
class Node{
    constructor(element){
        this.element = element;
        this.prev = null;
        this.next = null;
    }
}

//双向链表
class DoubleList{
    constructor(){
        //开头
        this.head = null ; 
        //结尾
        this.tail = null ;
        this.count = 0;
    }
    //问链表的末尾添加
    push(element){
        //创建节点
        let node = new Node(element)
        //判断链表是否为空
        if(this.head === null){
            //第一个即是最后一个
            this.head = node;
            this.tail = node;
        }else{
            //最后一个this.tail （没添加之前）
            let last = this.tail;
            //添加的为最后一个
            this.tail=node;

            last.next = node ;
            node.prev = last;
        }
        this.count++;
    }
    //查找指定的元素  循环迭代
    getElementAt(index){
        let current = this.head;
        for(let i = 0 ; i < index ; i++){
            current=current.next
        }
        return current
    }
    //在指定位置插入元素
    insert(element,index){
        //创建节点
        let node = new Node(element);
        if(index === 0){
        //1.在链表开头插入
            if(this.head === null){
                this.head =node;
                this.tail =node;
            }else{
                //第一个（没插入之前）
                let current = this.head;

                node.next = current;
                current.prev = node;

                //第一个 （插入之后）
                this.head = node
            }
            
        }else if(index === this.count){
        //2.在链表结尾插入
            //最后一个（没插入之前）
            let last = this.tail;

            last.next = node;
            node.prev = last;

        }else{
        //3.在链表中间插入
            //插入位置前一个元素prev
            let prev = this.getElementAt(index-1);
            //current 当前插入位置的元素
            let current = prev.next;
            //node 插入的元素
            prev.next = node;
            node.prev = prev;
            current.prev = node ; 
            node.next = current;
        }
        this.count++;
    }
}

let d = new DoubleList();

d.push('a')
d.push('b')
d.insert('c',0)
d.insert('d',3)
console.log(d)